﻿using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
using System.Xml;

namespace questionario
{
    public enum TipoPergunta { 
        Radio,
        Escala
    }

    public class Questionario
    {
        /// <summary>
        /// Lista de questões aplicadas para esta prova
        /// </summary>
        private List<Questao> Questoes= new List<Questao>();
        /// <summary>
        /// contador interno de questões
        /// </summary>
        int contador = 0;

        /// <summary>
        /// Carrega determinado questionário
        /// </summary>
        internal void Carregar(string rol)
        {
            this.rol = rol;
            XmlDocument x = new XmlDocument();
            try
            {
                x.Load(rol);
                ResetQuestoes();
                foreach (XmlElement xx in x.DocumentElement)
                {
                    if (xx.Name == "questao")

                        this.Questoes.Add(new Questao(xx));

                }
            }
            catch (Exception ex) { 
            
            }
            
            
        }

        /// <summary>
        /// Reset das questões de determinada prova
        /// </summary>
        public void ResetQuestoes()
        {
            Questoes.Clear();
            contador = 0;

        }

        /// <summary>
        /// Imprime em console determinada prova
        /// </summary>
        internal string Imprimir()
        {
            string sx="";
            
            foreach (Questao q in Questoes)
            {
                Console.Write(IncrementaContador() + ")");
                sx += this.contador + ")";

                sx+= q.Imprimir();
                
            }

            return sx;
        }

        /// <summary>
        /// Incrementa contador interno
        /// </summary>
        private int IncrementaContador()
        {
            return ++contador;
        }

        /// <summary>
        /// Obtém dados de determinado questionário
        /// </summary>
        internal string GetDados()
        {
            return this.Imprimir();
            
        }

        /// <summary>
        /// Obtém um controle do tipo label com a identificação da prova
        /// </summary>
        internal System.Windows.Forms.Label GetIdentificacaoProva()
        {
            System.Windows.Forms.Label lx = new System.Windows.Forms.Label();
            lx.Text = "Prova aplicada: "+ this.rol;
            lx.AutoSize = true;
            return lx;
        }

        /// <summary>
        /// Nome do arquivo / endereço web do rol de questoes a ser aplicado
        /// </summary>
        public string rol { get; set; }

        /// <summary>
        /// Get controles que possuem questões da prova
        /// </summary>
        internal IEnumerable<Questao> GetQuestoes()
        {
            return this.Questoes;
        }

        /// <summary>
        /// Salva progressão de execução da prova
        /// </summary>
        internal void SalvarProgressao()
        {

            XmlDocument doc = new XmlDocument();
            doc.LoadXml("<questionario></questionario>");

            //Create the XmlDocument.
            //try
            //{
            //    doc.Load("carteira.xml");
            //}
            //catch (Exception e)
            //{
            //    doc.Save("carteira.xml");
            //}


            foreach (Questao q in this.Questoes)
            {
                //Create a new node and add it to the document.
                //The text node is the content of the price element.
                //XmlElement elem = doc.CreateElement("questao");
                //XmlAttribute attr1 = doc.CreateAttribute("corretagemcompra");
                //attr1.InnerXml = p.corretagemCompra.ToString();
                //XmlAttribute attr2 = doc.CreateAttribute("emolumentoscompra");
                //attr2.Value = p.emolumentosCompra.ToString();
                //XmlAttribute attr3 = doc.CreateAttribute("valorcompra");
                //attr3.Value = p.montanteCompra.ToString();
                //XmlAttribute attr4 = doc.CreateAttribute("qtd");
                //attr4.Value = p.qtdPapeisCompra.ToString();

                //elem.Attributes.Append(attr1);
                //elem.Attributes.Append(attr2);
                //elem.Attributes.Append(attr3);
                //elem.Attributes.Append(attr4);

                //doc.DocumentElement.AppendChild(elem);

                //  doc.Save("carteira.xml");
                //remove the added element and save to modified.xml
                //XmlElement root = doc.DocumentElement;
                //root.RemoveChild(elem);

            }

            //Console.WriteLine("\nSalvando XML...");
            //doc.Save("carteira.xml");

        }

        /// <summary>
        /// Mostra correção de determinada prova
        /// </summary>
        internal void MostrarCorrecao(bool p)
        {
            this.ShowRespostas = p;
        }

        /// <summary>
        /// Exibe respostas corretas para determinada prova aplicada no momento
        /// </summary>
        public bool ShowRespostas { get; set; }

        /// <summary>
        /// Carrega determinado questionário
        /// </summary>
        internal void Carregar()
        {
            this.Carregar(rol);
        }

        
    }
}
